package com.vcredit.creditcat.api;

import com.vcredit.creditcat.dto.creditrepository.AuthItemDto;
import com.vcredit.creditcat.dto.product.CreditCardDto;
import com.vcredit.creditcat.dto.product.MerchantProductDto;
import com.vcredit.framework.exception.BaseException;
import java.util.List;

/**
 * @author 李小强
 *
 */
public interface ICustProductManager {

  List<MerchantProductDto> queryProductDto(Long processId, Boolean technical);

  /**
   *
   * @Title: queryProductAuth
   * @param processId
   * @param isAuth false：不可申请，true：可申请的产品
   * @return 参数
   * @return List<MerchantProductDto>    返回类型
   * @throws
   */
  List<MerchantProductDto> queryProductAuth(Long processId, Boolean isAuth, Boolean technical);

  /**
   *
   * @Title: queryHotProduct
   * @Description: (查询热门产品)
   * @param processId
   * @param isHot
   * @param @return    参数
   * @return List<MerchantProductDto>    返回类型
   * @throws
   */
  List<MerchantProductDto> queryHotProduct(Long processId, Boolean isHot, Boolean technical);

  /**
   *
   * @Title: queryHotProduct
   * @Description: (查询所有热门的产品)
   * @param @param isHot
   * @param @return    参数
   * @return List<MerchantProductDto>    返回类型
   * @throws
   */
  List<MerchantProductDto> queryHotProduct(Boolean isHot);

  /**
   *
   * @Title: queryApplyProduct
   * @Description: (查询申请的产品数)
   * @param custId
   * @return 参数
   * @return List<MerchantProductDto>    返回类型
   * @throws
   */
  List<MerchantProductDto> queryApplyProduct(Long custId);

  /**
   *
   * @Title: queryTechionalProduct
   * @Description: (查询可以对接的产品)
   * @param isTechional
   * @return 参数
   * @return List<MerchantProductDto>    返回类型
   * @throws
   */
  List<MerchantProductDto> queryTechionalProduct(Boolean isTechional);

  /**
   *
   * @Title: queryProductById
   * @Description: 根据产品取得产品ID
   * @param productId
   * @return 参数
   * @return MerchantProductDto    返回类型
   * @throws
   */
  MerchantProductDto queryProductById(Long productId, Long custId);

  /**
   *
   * @Title: queryProductItem
   * @Description: 根据procesId和productId计算出已经认证和未认证的项
   * @param processId
   * @param productId
   * @return 参数
   * @return List<AuthItemDto>    返回类型
   * @throws
   */
  List<AuthItemDto> queryProductItem(Long processId, Long productId);

  /***
   *
   * @Title: queryProductItem
   * @Description: (查询未认证的产品项)
   * @param @param processId
   * @param @param productId
   * @param @param isAuth
   * @param @return    参数
   * @return List<AuthItemDto>    返回类型
   * @throws
   */
  List<AuthItemDto> queryProductItem(Long processId, Long productId, Boolean isAuth);

  /**
   * @throws Exception @throws BaseException
   *
   * @Title: commit @Description: (这里用一句话描述这个方法的作用) @param productId
   * 产品ID @return void 返回类型 @throws
   */
  void commit(Long productId) throws BaseException, Exception;

  /**
   *
   * @Title: recommendCard
   * @Description: TODO(这里用一句话描述这个方法的作用)
   * @param custId
   * @return
   * @throws Exception    参数
   * @return Object    返回类型
   */
  List<CreditCardDto> recommendCard(Long custId, int filter, String appDesc) throws Exception;

  /**
   * 查询所有产品
   * @return
   */
  List<MerchantProductDto> queryAllProductDto();

  /**
   * 查询用户筛选的产口
   * @param tags
   * @return
   */
  List<MerchantProductDto> queryFitProduct(Long custId, String answers, String appDesc);


  /**
   * 查询成功贷款数
   * @param custId
   * @return
   */
  int getSuccessLoanApplyCount(Long custId);

}
